package br.com.registrofinancas.controller;

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.List;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import br.com.registrofinancas.R;
import br.com.registrofinancas.adapters.FinancasGanhosAdapter;
import br.com.registrofinancas.adapters.FinancasGastosAdapter;
import br.com.registrofinancas.database.MovimentosEntradaDAO;
import br.com.registrofinancas.database.MovimentosSaidaDAO;
import br.com.registrofinancas.model.ExpenseVO;
import br.com.registrofinancas.model.IncomeVO;
import br.com.registrofinancas.util.CalendarUtilNavegavacaoMes;
import br.com.registrofinancas.view.FinancasActivity;

public class FinancasActivityGanhosController {

	private static FinancasActivityGanhosController instance = new FinancasActivityGanhosController();
	private FinancasActivity financasActivity;
	private GregorianCalendar mes;
	private TextView mesAnoHeaderNavegacao;
	private SimpleDateFormat formatoMesAnoHeaderNavegacao;
	private ListView listViewGanhos;
	private MovimentosEntradaDAO dao;
	
	private FinancasActivityGanhosController() {}
	
	public static FinancasActivityGanhosController getInstance() {
		return instance;
	}
	
	private OnClickListener btnPreviousMonth(){
		return new OnClickListener() {			
			@Override
			public void onClick(View v) {
				GregorianCalendar mMes = CalendarUtilNavegavacaoMes.setPreviousMonth(mes);
				CalendarUtilNavegavacaoMes.setMes(financasActivity, mMes, mesAnoHeaderNavegacao, formatoMesAnoHeaderNavegacao);
				getEntradas();
			}
		};
	}
	
	private OnClickListener btnNextMonth(){
		return new OnClickListener() {			
			@Override
			public void onClick(View v) {
				GregorianCalendar mMes = CalendarUtilNavegavacaoMes.setNextMonth(mes);
				CalendarUtilNavegavacaoMes.setMes(financasActivity, mMes, mesAnoHeaderNavegacao, formatoMesAnoHeaderNavegacao);
				getEntradas();
			}
		};
	}

	public void setInitDadosTab(FinancasActivity financasActivity, ListView listViewGanhos) {
		
		this.financasActivity = financasActivity;
		
		this.listViewGanhos = listViewGanhos;		
		
		setupHeaderData();
		
		CalendarUtilNavegavacaoMes.setMes(financasActivity, mes, mesAnoHeaderNavegacao, formatoMesAnoHeaderNavegacao);
					
		getEntradas();
		
		setupListeners();
		
	}
	
	private void getEntradas(){

		if (dao == null) {
			dao = new MovimentosEntradaDAO(financasActivity);
		}
				
		List<IncomeVO> entradas = dao.getEntradasPorMes(mes.getTime());
				
		FinancasGanhosAdapter adapter = new FinancasGanhosAdapter(financasActivity, entradas);
		
		listViewGanhos.setAdapter(adapter);
		
		setValorTotalAndSaldoTotal(dao);
	
	}
	
	public void setupListeners() {
		((ImageButton) financasActivity.findViewById(R.id.financas_navegacao_data_ganhos_ib_previous_month)).setOnClickListener(btnPreviousMonth());
		((ImageButton) financasActivity.findViewById(R.id.financas_navegacao_data_ganhos_ib_next_month)).setOnClickListener(btnNextMonth());
	}
	
	private void setupHeaderData(){
		mes = (GregorianCalendar) GregorianCalendar.getInstance();
		mesAnoHeaderNavegacao = (TextView) financasActivity.findViewById(R.id.financas_navegacao_data_ganhos_tv_mes_ano_atual);
		formatoMesAnoHeaderNavegacao = new SimpleDateFormat("MMM/yyyy");
	}
	
	private void setValorTotalAndSaldoTotal(MovimentosEntradaDAO dao){
		TextView tvValorTotal = (TextView) financasActivity.findViewById(R.id.financas_lista_ganhos_tv_valor_total);
		TextView tvSaldoTotal = (TextView) financasActivity.findViewById(R.id.financas_lista_ganhos_tv_saldo_total);

		double valorTotal = dao.getValorTotalEntradasPorMes(mes.getTime());
		double saldoTotal = dao.getSaldoTotalEntradasPorMes(mes.getTime());	
						
		tvValorTotal.setText("Total: "+String.valueOf(valorTotal));	
		tvSaldoTotal.setText("Saldo: "+String.valueOf(saldoTotal));	

	}
			
}
